/* 应用程序入口文件 */

//加载express模块
var express = require('express');
var swig = require('swig'); //加载模板
//加载数据库模块
var mongoose = require('mongoose');
// 加载body-parser 用来处理post提交过来的数据
var bodyParser = require('body-parser');
// 加载cookies
var Cookies = require('cookies');

// 
var User = require("./models/Users");


//创建应用 => node.js http.createServer()
var app = express();

// 设置静态文件托管
// 当用户访问的url以/public开始,那么直接返回对应的__dirname + "public"下的文件
app.use("/public", express.static(__dirname + "/public"))

//模板配置
//定义当前应用所使用的模板引擎
//第一个参数：模板引擎名称，同时也是模板文件后缀，
// 第二个参数表示用于解析处理模板内容的方法
app.engine('html', swig.renderFile);
//设置模板存放目录，第一个参数必须是views，第二个是目录
app.set('views', "./views");
//注册所使用模版引擎，第一个参数必须是view engine 第二个参数和app.engine
//这个方法中定义的模板引擎名称(第一个参数)是一致的
app.set('view engine', 'html');

//开发过程 需要取消模板缓存
swig.setDefaults({
    cache: false
})

// bodyParser设置
app.use(bodyParser.urlencoded({
    extended: true
}))
// cookies设置
app.use(function (req, res, next) {
    req.cookies = new Cookies(req, res);
    //解析登录用户的cookies信息   
    req.userInfo = {};
    if (req.cookies.get('userInfo')) {
        try {
            req.userInfo = JSON.parse(req.cookies.get('userInfo'));

            // 获取当前登录用户的类型，是否是管理员
        // User.findById(req.userInfo._id).then(function(userInfo){
        //     req.userInfo.isAdmin = Boolean(userInfo.isAdmin);
        //     next();
        // })
        next();
        } catch (e) {
            next();
        }
    } else {
        next();
    }

})
/*
 * 首页
 * req request对象
 * res response对象
 * next 函数
 * */
// app.get('/', function (req, res, next) {
//     //res.send(' hhh')
//     /*
//      *  读取views目录下的指定文件，解析并返回给客户端
//      *  第一个参数，表示模板的文件，相对于views目录 views/index.html
//      *  第二个参数，传递给模板使用的数据
//      * */
//     //res.render('main/index');
// })

/*
 *根据不同的功能划分模块
 */
app.use('/admin', require("./routers/admin"))
app.use('/api', require("./routers/api"))
app.use('/', require("./routers/main"))



// mongodb协议 + localhost:27017 端口  + 数据库
mongoose.connect('mongodb://localhost:27017/blog', function (err) {
    if (err) {
        console.log('数据库连接失败')
    } else {
        console.log('数据库连接成功');
        console.log('server is at 8888...')
        //监听http请求
        app.listen(8888);
    }
})

//用户发送http请求  -》url 》解析路由 》找到匹配规则 》执行指定绑定的函数，返回对应的内容
//public 》 静态 》直接读取指定目录下的文件返回用户
//动态 》处理业务逻辑，加载模板，解析模板 》返回数据给用户